$(function () {
    initToolPermissions();// 根据登录用户 loginName 初始化工具栏权限
    getMenu();
    delayInitFirstLevelMenuItem();//延迟1秒初始化一级菜单项的点击事件
    initTabs();
    setPermissions();
    $(document).find('head').append(`<link rel="stylesheet" href="css/home.css?rand=${Math.random()}"/>`);
})

/**
 * 清空权限
 */
function clearPermissions() {
    localStorage.clear();
}

/**
 * 获取权限
 */
function setPermissions() {
    const KEY = "XZY_USER_PERMISSIONS";
    if (localStorage.getItem(KEY) == undefined) {
        $.ajax({
            url: 'sysUser/permissions',
            method: 'GET',
            dataType: 'json',
            success: function (data) {
                localStorage.setItem(KEY, JSON.stringify(data || []));
            }
        });
    }
}

/**
 * 获取权限
 */
function getPermissions() {
    const KEY = "XZY_USER_PERMISSIONS";
    return JSON.parse(localStorage.getItem(KEY));
}

/**
 * 初始化标签页
 */
function initTabs() {
    $('#home_tabs').tabs({
        fit: true,
        border: false,
        onContextMenu: function (e, title, index) {
            e.preventDefault();
            let div = `<div id="home_tabs_menu">
                <div data-options="iconCls:'icon-reload'">刷新当前</div>
                <div data-options="iconCls:'icon-application_delete'">关闭当前</div>
                <div data-options="iconCls:'icon-application_form_delete'">关闭所有</div>
                <div data-options="iconCls:'icon-no'">关闭其他</div>
                <div data-options="iconCls:'icon-arrow_left'">关闭左侧标签页</div>
                <div data-options="iconCls:'icon-arrow_right'">关闭右侧标签页</div>
                </div>`;
            if ($("#home_tabs_menu").length <= 0) $('body').append(div);
            let menu = $("#home_tabs_menu");
            menu.menu({
                border: false,
                onClick: function (item) {
                    let name = item.text;
                    tabContextMenu($('#home_tabs'), name, title, index);
                }
            });
            menu.menu('show', {
                top: e.pageY,
                left: e.pageX
            });
        },
    })
}

/**
 * 标签页操作菜单
 */
function tabContextMenu(ele, name, title, index) {
    let tabs = $(ele);
    switch (name) {
        case '关闭当前':
            tabs.tabs('close', title);
            break;
        case '刷新当前':
            tabs.tabs('select', title);
            let currentTab = tabs.tabs('getSelected');
            refreshTab(currentTab);
            break;
        case '关闭所有':
            $(".tabs li").each(function (index, obj) {
                let tabTitle = $(".tabs-closable", this).text();
                tabs.tabs("close", tabTitle);
            });
            break;
        case '关闭其他':
            $(".tabs li").each(function (index, obj) {
                let tabTitle = $(".tabs-closable", this).text();
                if (title != tabTitle) {
                    tabs.tabs("close", tabTitle);
                }
            });
            break;
        case '关闭左侧标签页':
            var $tabs = $(".tabs li");
            for (let i = 0; i < $tabs.length; i++) {
                //获取所有可关闭的选项卡
                let tabTitle = $(".tabs-closable", $tabs[i]).text();
                if (tabTitle != title) {
                    tabs.tabs("close", tabTitle);
                } else {
                    break;
                }
            }
            break;
        case '关闭右侧标签页':
            var $tabs = $(".tabs li");
            for (let i = $tabs.length - 1; i >= 0; i--) {
                //获取所有可关闭的选项卡
                let tabTitle = $(".tabs-closable", $tabs[i]).text();
                if (tabTitle != title) {
                    tabs.tabs("close", tabTitle);
                } else {
                    break;
                }
            }
            break;
    }

    function refreshTab(currentTab) {
        if (!currentTab) currentTab = $(ele).tabs('getSelected');
        if (currentTab && currentTab.find('iframe').length > 0) {
            currentTab.find('iframe')[0].contentWindow.location.reload(true);
        }
    }
}

/**
 * 生成菜单Tree
 */
function getMenu() {
    $('#home_tree').ejectAside({
        url: 'sysMenu/tree',
        menuSplitSize: 6,
        labelWidth: 170,
        onLoadFilter: function (data = []) {
            for (let i = 0; i < data.length; i++) {
                if (i === 0) {
                    data[i]['childItemNumberPerCol'] = 4;
                    break;
                }
            }
            return data;
        },
        onClickChild: function (id, node) {
            let attr = $(node).data('options');
            // console.log('点击菜单项得到的参数，attr.text',attr.text,'path:',attr.attribute.path);
            const title = remove12288(attr.text);
            addTab(title, attr.attribute.path);
        },
        backgroundColor: '#364150',
    })
    /* $('#home_tree').tree({
         url: 'sysMenu/tree',
         method: 'GET',
         animate: true,
         lines: true,
         onClick: function (node) {
             if ($(this).tree('getParent', node.target)) {
                 addTab(node.text, node.attribute.path);
             }
         }
     })*/
}

/**
 * 登出
 */
function btn_logout() {
    $.messager.confirm('提示', '是否登出？', function (r) {
        if (r) {
            $.ajax({
                url: 'system/logout',
                type: 'POST',
                dataType: 'json',
                complete: function (xhr, status) {
                    clearPermissions();
                    window.location.reload();
                }
            })
        }
    })
}

/**
 * 创建iFrame
 * @param url
 * @returns {string}
 */
function createIFrame(url) {
    return `<iframe scrolling="auto" frameborder="0" src="${url}" style="width:100%;height:100%;overflow:hidden;"/>`;
}

/**
 * 新增标签页
 * @param title
 * @param url
 * @param iconCls
 */
function addTab(title, url, iconCls) {
    if ($('#home_tabs').tabs('exists', title)) {
        $('#home_tabs').tabs('select', title);
    } else {
        $('#home_tabs').tabs('add', {
            title: title,
            fit: true,
            content: createIFrame(url),
            closable: true,
            iconCls: iconCls || ''
        });
        $('#home_tabs').find('div > .panel-body').addClass('overflow-hidden');
    }
}

/**
 * 重命名标题(添加后缀)
 * @param id
 */
function renameTab(id) {
    let tab = $('#home_tabs').tabs('getSelected');
    let index = $('#home_tabs').tabs('getTabIndex', tab);
    if (index != -1) {
        let currentTitle = tab.panel('options').title || '';
        let arr = currentTitle.split('-');
        let newTitle = id ? (arr[0] + '-' + id) : arr[0];
        tab.panel('setTitle', newTitle);
    }
}

/**
 * 获取当前标签名
 */
function getSelectedTabOptions() {
    let selected = $('#home_tabs').tabs('getSelected');
    return $(selected).panel('options');
}

/**
 * 关闭标签页
 */
function closeTab() {
    let tab = $("#home_tabs").tabs('getSelected');
    let index = $("#home_tabs").tabs('getTabIndex', tab);
    $("#home_tabs").tabs('close', index);
}

/**
 * 修改密码
 */
function btn_modify_pwd() {
    $('#modifyPwd').dialog('open');
}

/**
 * 取消
 */
function btn_modify_pwd_dialog_cancel() {
    $('#modifyPwd').dialog('close');
}

/**
 * 保存
 */
function btn_modify_pwd_form_save() {
    $('#modifyPwd').find('form').eq(0).form('submit', {
        url: 'sysUser/password/edit',
        onSubmit: function (param) {
            return $(this).form('validate');
        },
        success: function (data) {
            if (!data) {
                return;
            }
            data = eval('(' + data + ')');
            if (data.success) {
                $('#modifyPwd').dialog('close');
                $.messager.show({title: '提示', msg: data.message});
            } else {
                $.messager.alert('提示', data.message, 'warning');
            }
        }
    })
}

$.extend($.fn.validatebox.defaults.rules, {
    equals: {
        validator: function (value, param) {
            let _value = $(param[0]).textbox('getValue');
            return value == _value;
        },
        message: '两次密码输入不正确!'
    }
});

// 测试
function test(){
    console.log('进入test函数');
    const lis = $("#home_tree ul li");
    console.log('所有菜单项：',lis);
    if(lis.length>0){
        console.log('开始循环绑定点击事件');
        for(let item of lis){
            let attr = $(item).data('options');
            item.onclick = function(event,a,b){
                console.log('点击了li元素，参数是：',event);
                console.log('attr:',attr);
                const id = attr.id;
                const text = attr.text;
                const path = attr.attribute.path;
                console.log('三个属性依次是：id:' + id + ',text:' + text + ',path:' + path);
                addTab(attr.text, attr.attribute.path);
            }


        }
        console.log('循环绑定点击事件结束');
    }
}

// 2022年8月24日 14:09:53 chanchaw
// 之前小张没有处理一级菜单的点击事件
// 在制作客户系统时追加该功能
function initFirstLevelMenuItem(){
    const lis = $("#home_tree ul li");
    if(lis.length <= 0) return;

    // for(let item of lis){
    //     let attr = $(item).data('options');
    //     const id = attr.id;
    //     const text = attr.text;
    //     const path = attr.attribute.path;
    //     // sys_menu.menu_path = '/' 表示一级菜单项，没有页面
    //     if(path === INVALID_FIRST_LEVEL_MENU_SYMBOL) continue;
    //
    //     item.onclick = function(event){
    //         addTab(attr.text, attr.attribute.path);
    //     }
    // }

    const keys = Object.keys(lis);
    for (let i = 0; i < keys.length; i++) {
        const currentKey = keys[i];
        const ret = $.isNumeric(currentKey)
        if(ret){// 是数字表示是菜单项
            const item = lis[currentKey];
            setMenuItemLink(item);
        }
    }

    // const item01 = lis['0'];
    // console.log(item01);
    // setMenuItemLink(item01)
    //
    // const item02 = lis['1'];
    // console.log(item02);
    // setMenuItemLink(item02)
    //
    // const item03 = lis['2'];
    // console.log(item03);
    // setMenuItemLink(item03)
}

function setMenuItemLink(liItem){
    let attr = $(liItem).data('options');
    const path = attr.attribute.path;
    if(path !== INVALID_FIRST_LEVEL_MENU_SYMBOL)
        liItem.onclick = function(event){
            addTab(attr.text, path);
        }
}

// 2022年8月24日 14:36:57 由于没有找到 $('#home_tree').ejectAside({
// 对应的控件，无法在回调中做初始化，只能通过延迟做
function delayInitFirstLevelMenuItem(){
    setTimeout(()=>{
        initFirstLevelMenuItem();
    },1000);
}

function initToolPermissions(){
    //loginInfo = {"loginName": "root","userPhone": "123456","loginPassword": "xdf123"}
    const loginInfo = JSON.parse(localStorage.getItem("loginInfo"));
    if(!loginInfo) return;
    const loginName = loginInfo.loginName;
    if(!loginName || loginName.length <=0) return;

    getUserToolPermissions(loginName);
}

// 删除全角空格
function remove12288(str){
    let ret = '';
    for(let i=0;i<str.length;i++){
        if(str.charCodeAt(i)!==12288)
            ret = ret + String.fromCharCode(str.charCodeAt(i));
    }
    return ret;
}